ass Solution {
public:
    class myqueue
    {
    private: 
      deque<int> que;
    public:
      void pop(int val)
      {
        if (!que.empty() && val == que.front())
        {
           que.pop_front();
        }
      }

      void push(int val)
      {
        while (!que.empty() && val > que.back())  // 一直大于也是单调的
        { 
            que.pop_back();
        }

        que.push_back(val);
      }

      int front()
      {
          return que.front();
      }
    };
    vector<int> maxSlidingWindow(vector<int>& nums, int k) 
    {
        vector<int> ans;
        myqueue q1;
        for (int i = 0; i < k ; i ++)
        {
            q1.push(nums[i]);
        }

        ans.push_back(q1.front());

        for (int i = k ; i < nums.size() ; i++)
        {
            q1.pop(nums[i - k]);
            q1.push(nums[i]);
            ans.push_back(q1.front()); 
        }

        return ans;
    }
};
